SQL ORDER BY
Home

SQL ORDER BY

SQL ORDER BY

De ORDER BY clausule voeg je aan een SELECT statement toe om de lijst te ordenen.

Probleem

Het is niet genoeg gegevens uit een tabel te kunnen opvragen, je moet ze ook kunnen sorteren of ordenen. We willen bijvoorbeeld lijsten in alfanumerieke volgorde weergeven omdat het gemakkelijker is om bijvoorbeeld een naam in een alfanumeriek geordende lijst te zoeken.

Oplossing

Om te sorteren gebruiken we de clusule ORDER BY . Het sorteren kan op 2 manieren:

  1. oplopend en
  2. aflopend.

In het Engels is dat ascending en descending. In SQL wordt dat afgekort naar de clausules ASC en DESC. Stel dat je de namen uit de tabel boeken wil opvragen gesorteerd op de voornaam, de familienaam en titel van de boeken. De query ziet er dan zo uit:

-- ji
-- 4 december 2012
--
use JefInghelbrecht;

-- genest orderen
-- ascending
select Voornaam, Familienaam, Titel from Boeken
   order by Familienaam asc, Voornaam, Titel;

-- desc
-- descending
select Voornaam, Familienaam, Titel from Boeken
   order by Familienaam desc, Voornaam, Titel

Oefening

Selecteer alle boeken volgens Verschijningsjaar te beginnen met het meest recente boek

-- ji
-- 11 september 2013
-- bestandsnaam: BoekenSelectOrderByVerschijningsjaar.sql
use JefInghelbrecht;
select Verschijningsjaar,
   Voornaam,
   Familienaam,
   Titel
from Boeken
   order by Verschijningsjaar desc;

De volgorde van de kolommen in de ORDER BY clausule moet niet overeenkomen met de volgorde van de kolommen in het SELECT statement.

De clausule ASC of DESC moet voor elke kolom bepaald worden. Je kan de volgorde dus ook mixen:

select Voornaam, Familienaam, Titel from Boeken
   order by Familienaam desc, Voornaam, Titel asc;

Hieronder zie je het resultaat in SSMS (in MySQL Workbench is dat gelijkaardig):

select order by -asc en desc voor elke kolom bepalen
select order by - asc en desc voor elke kolom bepalen

Kenny merkte op dat je de voornaam en familienaam in één kolom kan plaatsen en had deze oplossing:

select Voornaam + space(1) + Familienaam as Auteur, Title
   from Boeken
   order by Auteur asc, Titel asc;

space() is een functie die het aantal spaties retourneert die door het argument aangegeven wordt.

Yoshi merkte op dat de kolom geen naam heeft:

select - kolommen zonder kolomtitel
select - kolommen zonder kolomtitel

Je kan aan de samengestelde kolom een naam geven door gebruik te maken van de as clausule:

select Voornaam + space(1) + Familienaam as Naam, Titel
   from Boeken
   order by Familienaam desc, Voornaam, Titel asc
select - kolomtitel opgeven met de as clausule
select - kolomtitel opgeven met de as clausule

Opdracht

Selecteer verschijningsjaar, titel en auteur van alle boeken volgens verschijningsjaar te beginnen met het meest recente boek en binnen elke verschijningsjaar zijn de familienamen alfabetisch geordend.

Sla de script op in BoekenSelectOrderByMeestRecenteBoekEerst.sql

JI

2020-01-26 13:01:35